package top.zlcode.ai.domain.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;

/**
 * Deepseek API的响应数据实体类
 */
@Data
public class DeepSeekVO {

    /**
     * 该对话的唯一标识符
     */
    private String id;

    /**
     * 对象的类型，其值为 chat.completion
     */
    private String object;

    /**
     * 创建聊天完成时的Unix时间戳（以秒为单位）
     */
    private Integer created;

    /**
     * 生成该completion的模型名
     */
    private String model;

    /**
     * 模型生成的completion的选择列表
     */
    private List<Choice> choices;

    /**
     * 该对话补全请求的用量信息
     */
    private Usage usage;

    /**
     * 代表模型运行的后端配置的指纹
     */
    @JsonProperty("system_fingerprint")
    private String systemFingerprint;

    /**
     * 模型生成的completion的选择项
     */
    @Data
    public static class Choice {
        /**
         * 该completion在模型生成的completion的选择列表中的索引
         */
        private Integer index;

        /**
         * 模型生成的completion消息
         */
        private Message message;

        /**
         * 该choice的对数概率信息
         */
        private Object logprobs;

        /**
         * 模型停止生成token的原因
         * 可能的值: stop, length, content_filter, tool_calls, insufficient_system_resource
         */
        @JsonProperty("finish_reason")
        private String finishReason;
    }

    /**
     * 模型生成的消息内容
     */
    @Data
    public static class Message {
        /**
         * 生成这条消息的角色，可能的值: [assistant]
         */
        private String role;

        /**
         * 该completion的内容
         */
        private String content;

        /**
         * 仅适用于deepseek-reasoner模型，内容为assistant消息中在最终答案之前的推理内容
         */
        @JsonProperty("reasoning_content")
        private String reasoningContent;

        /**
         * 工具调用信息列表
         */
        @JsonProperty("tool_calls")
        private List<Object> toolCalls;
    }

    /**
     * 对话补全请求的用量信息
     */
    @Data
    public static class Usage {
        /**
         * 用户prompt所包含的token数，等于prompt_cache_hit_tokens + prompt_cache_miss_tokens
         */
        @JsonProperty("prompt_tokens")
        private Integer promptTokens;

        /**
         * 模型completion产生的token数
         */
        @JsonProperty("completion_tokens")
        private Integer completionTokens;

        /**
         * 该请求中所有token的数量（prompt + completion）
         */
        @JsonProperty("total_tokens")
        private Integer totalTokens;

        /**
         * 用户prompt中，命中上下文缓存的token数
         */
        @JsonProperty("prompt_cache_hit_tokens")
        private Integer promptCacheHitTokens;

        /**
         * 用户prompt中，未命中上下文缓存的token数
         */
        @JsonProperty("prompt_cache_miss_tokens")
        private Integer promptCacheMissTokens;

        /**
         * prompt tokens的详细信息
         */
        @JsonProperty("prompt_tokens_details")
        private PromptTokensDetails promptTokensDetails;

        /**
         * completion tokens的详细信息
         */
        @JsonProperty("completion_tokens_details")
        private CompletionTokensDetails completionTokensDetails;
    }

    /**
     * prompt tokens的详细信息
     */
    @Data
    public static class PromptTokensDetails {
        /**
         * 缓存的token数量
         */
        @JsonProperty("cached_tokens")
        private Integer cachedTokens;
    }

    /**
     * completion tokens的详细信息
     */
    @Data
    public static class CompletionTokensDetails {
        /**
         * 推理模型所产生的思维链token数量
         */
        @JsonProperty("reasoning_tokens")
        private Integer reasoningTokens;
    }
}
